#include<iostream>
using namespace std;

//编程序求以下表达式的值：1-2+3-4+……+m；
//特征：当前数是奇数，就加上当前这个数，是偶数就减去当前这个数
int GetExpressionValue(int m)
{
    int sum = 0;
    for(int i = 1;i<=m;i++)
    {
        if(i & 1) //奇数  i & 1 ==> i % 2 == 1
            sum += i;
        else 
            sum -= i;    
    }
    return sum;
}

//一张一元纸币兑换成一分、两分和五分的硬币，假定每一种至少一枚，编程序计算共有多少种方法并打印每种兑换方法；
//思路：
// 1元 = 100分，可以使用三层循环分别枚举需要使用的1分/2分/5分硬币的数量
void CoinQuantity(int target) //需要凑成多少分
{
    int sum = 0;
    //每种硬币最少使用一枚
    for(int i = 1;i<=target;i++) //最多使用target 枚 一分硬币
    {
        for(int j = 1;j<=target/2;j++) //最多使用target/2 枚 2分硬币
        {
            for(int k = 1;k<=target/5;k++) //最多使用target/5 枚 5分硬币
            {
                if(i + j * 2 + k *5 == 100)
                    printf("使用一分硬币的数量为：%d  使用两分硬币的数量为：%d 使用五分硬币的数量为：%d\n",i,j,k),sum++;
            }
        }
    }
    printf("要凑成%d分的方法数为:%d\n",target,sum);
    printf("\n");
}


void PrintRhombus(int line)
{
    //1.打印上半部分-line行
    for(int i = 0;i<line;i++)
    {
        //1.1：打印空格 空格数每一行由多变少
        for(int j = 0;j<line-1-i;j++)
            printf(" ");
        //1.2：打印*    *每一行由少变多   
        for(int j = 0;j<2 * i + 1;j++)
            printf("*");
        //1.3：换行
        printf("\n");
    }

    //2.打印下半部分-line-1行
    for(int i = 0;i<line-1;i++)
    {
        //2.1：打印空格 空格数每一行由少变多
        for(int j = 0;j<=i;j++)
            printf(" ");
        //2.2：打印*    *每一行由多变少
        for(int j = 0;j<2*(line-1-i)-1;j++)
            printf("#");
        //2.3：换行
        printf("\n");
    }
}
int main()
{
    PrintRhombus(7);
    return 0;
}